//
//  NCPageRouter.swift
//  NCRouterBus
//
//  Created by zhanwenyan on 2018/10/16.
//  Copyright © 2018年 Newcoretech. All rights reserved.
//
// UI 路由协议，每个模块需要实现这个协议，路由表将存储该协议的实例化对象

import Foundation
import UIKit

/// 页面跳转方式
public enum PageSkipType {
    case push(animated: Bool)
    case present(animated: Bool, completion: (() -> Void)?)
}

/// 页面路由协议，最好使用class实现该协议
public protocol NCModuleRouter {

    /// 查找路由界面
    ///
    /// - Parameters:
    ///   - url: URL短链  {module_name}://page/{page_name}
    ///   - params: 跳转参数
    ///   - onResult: route回传数据
    ///   - skipType: 页面跳转方式
    /// - Returns: 返回 NCRouterViewController 类型实例
    func routePage(url: URL?, params: [String: Any]?, onResult: ((_ res: [String: Any]?) -> Void)?, skipType: PageSkipType) -> UIViewController?
    
    /// 路由是否存在
    ///
    /// - Parameter url: URL短链  {module_name}://page/{page_name}
    /// - Returns: 返回true: 存在； false: 不存在
    func hasRoute(url: URL?) -> Bool
}

/// RouteViewController 协议，定义初始化的传参数，需要路由的ViewController要实现该协议
public protocol NCModuleRouterController {
    var isPresent: Bool { get }
    
    var onResult: ((_ res: [String: Any]?) -> Void)? { get }
    
    static func `init`(params: [String: Any]?, onResult: ((_ res: [String: Any]?) -> Void)?, isPresent: Bool) -> UIViewController?
}
